/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.sorbonne.inf5.yams.model;

import fr.sorbonne.inf5.yams.exceptions.DeNotRunException;
import fr.sorbonne.inf5.yams.model.combinaison.Combinaison;
import fr.sorbonne.inf5.yams.model.combinaison.UnCombinaison;
import fr.sorbonne.inf5.yams.model.iaCombinaison.IACombinaison;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Riad Oukherfellah
 * @author Romain Dubos
 */
public class IASequentiel extends AbstractIA {

    private Map<Combinaison, IACombinaison> combinaisons;
    private Combinaison nextCombi;
    private int indNext;

    public IASequentiel(String pNom, IAYams iaYams) {
        super(pNom, iaYams);
        combinaisons = new LinkedHashMap<Combinaison, IACombinaison>();
         IACombinaison iaCombi = null;
        for (Combinaison c : iaYams.getCombinaisons()) {
            String className = c.getClass().getSimpleName();
            try {
                Class classe = Class.forName(IACombinaison.path + "IA" + className);
                iaCombi = (IACombinaison) classe.newInstance();
                combinaisons.put(c, iaCombi);
            } catch (Exception ex) {
                Logger.getLogger(IASequentiel.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        indNext=-1;


    }

    @Override
    public String jouer() {
        indNext++;
        nextCombi = (Combinaison)combinaisons.keySet().toArray()[indNext];
        while (iaYams.renvoyerNombreLancerRestant() > 0) {
            iaYams.lancerDe();
            List<De> des = iaYams.renvoyerDeCourant();
            iaYams.bloquerDer(combinaisons.get(this.nextCombi).bloquerDe(des));
        }
        return nextCombi.getIntitule();
    }
}
